﻿namespace Excerise;

public class Program
{
    public static void Main(string[] args)
    {
        // 十四、集成查询（LINQ）练习题
        // 数据筛选与排序
        // 给定一个学生列表，包含学生姓名、年龄、成绩等属性。
        // 使用LINQ查询语句筛选出年龄大于18岁且成绩大于80分的学生，并按照成绩降序排列，输出筛选后的学生信息。
        var stus = new List<Student>();
        stus.Add(new Student("张三", 19, 90));
        stus.Add(new Student("李四", 16, 82));
        stus.Add(new Student("王五", 20, 60));
        stus.Add(new Student("老六", 20, 85));
        var one = stus.Where(item => item.Age > 18 && item.Score > 80).OrderByDescending(item => item.Score);
        foreach (var item in one)
        {
            System.Console.WriteLine(item);
        }

        // 分组与聚合
        // 给定一个订单列表，包含订单编号、客户姓名、订单金额等属性。
        // 使用LINQ查询语句按客户姓名分组，并计算每个客户的订单总金额，输出客户姓名和对应的订单总金额。
        var orders = new List<Order>
        {
            new Order(1,"张三",50),
            new Order(2,"李四",50),
            new Order(3,"张三",100),
        };
        var two = orders.GroupBy(item => item.Name).Select(item => new { Name = item.Key, Total = item.Sum(order => order.Total) });
        foreach (var item in two)
        {
            System.Console.WriteLine(item);
        }

        // 联合查询
        // 给定两个列表，一个是学生列表，包含学生姓名和班级编号；另一个是班级列表，包含班级编号和班级名称。使用LINQ查询语句将学生和班级信息进行联合查询，输出每个学生的姓名和对应的班级名称。
        var studS = new List<Stu>();
        studS.Add(new Stu("张三", 1));
        studS.Add(new Stu("李四", 2));
        studS.Add(new Stu("王五", 1));
        studS.Add(new Stu("老六", 2));
        var clazzS = new List<Clazz>
        {
            new Clazz("一班",1),
            new Clazz("二班",2),
        };
        var three = studS.Join(clazzS, stu => stu.CId,
                                        clazz => clazz.CId,
                                        (stu, clazz) => new { Name = stu.StuName, ClaName = clazz.ClaName });
        foreach (var item in three)
        {
            System.Console.WriteLine(item);
        }


        // 数据去重
        // 给定一个字符串列表，使用LINQ查询语句去除重复的字符串，输出去重后的字符串列表。
        var str = new List<string> { "aaa", "bbb", "ccc", "aaa" };
        var four = str.Distinct();
        foreach (var item in four)
        {
            System.Console.Write(item + " ");
        }
System.Console.WriteLine();
        // 条件统计
        // 给定一个产品列表，包含产品名称、价格、库存数量等属性。使用LINQ查询语句统计价格大于100且库存数量大于5的产品数量，输出统计结果。
        var products = new List<Product>
        {
            new Product("手机",1000,10),
            new Product("电脑",1000,6),
            new Product("榴莲",30,10),
            new Product("苹果",10,1000),
            new Product("路由器",200,1000),
        };
        var five = products.Count(item=>item.Price > 100 && item.Stock > 5);
        System.Console.WriteLine("第五题:   "+five);
    }
}